/**
 * 
 */
package cn.springsoter.core.security.annotation;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import cn.springsoter.core.security.enums.SensitiveTypeEnum;
import cn.springsoter.core.security.serializer.SensitiveInfoSerialize;

/**
 * 敏感信息注解类（简单型）
 * 
 * @author kevin
 *
 */
@Retention(RUNTIME)
@Target(FIELD) //用于字段
@JacksonAnnotationsInside
@JsonSerialize(using = SensitiveInfoSerialize.class)
public @interface SensitiveInfo {
	/**
	 * 脱敏枚举
	 * 
	 * @return
	 */
	SensitiveTypeEnum value() default SensitiveTypeEnum.NONE;
	
	/**
	 * 是否需要加解密
	 * 
	 * @return
	 */
	boolean needCrypto() default false;
	
	/**
	 * 是否使用自定义
	 * 
	 * @return
	 */
	boolean useCustom() default false;
	
	/**
	 * 保留左边几位，此参数只有useCustom=true时生效
	 * 
	 * 比如：手机号：18812345678
	 * 	keepLeft=3 && keepRight=4 ==> 188****5678
	 * 
	 * @return
	 */
	int keepLeft() default 0;
	
	/**
	 * 保留右边几位，此参数只有useCustom=true时生效
	 * 
	 * 比如：手机号：18812345678
	 * 	keepLeft=3 && keepRight=4 ==> 188****5678
	 * 
	 * @return
	 */
	int keepRight() default 0;
}
